package homework.hw2;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @Author Administrator
 * @Date 2020/5/21 14:55
 **/
@WebServlet("/forwardAndRedirect1")
public class ForwardAndRedirect1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /*1.先定义已有的用户名和密码
        2.获取用户输入的用户名和密码
        3.比较：
        若一致，把用户名保存在域对象，重定向到forwardAndRedirect2
        若不一致，把错误信息保存在域对象，转发到forwardAndRedirect3
         */
        String name = "张三";
        String pwd = "123";
        //获取用户输入的用户名和密码
        //通过请求request对象获取请求参数
        //获取中文请求参数，必须设置编码为utf-8
        req.setCharacterEncoding("utf-8");
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println(username);
        //比较
        if (name.equals(username) && pwd.equals(password)) {
            //若一致，把用户名保存在域对象，重定向到forwardAndRedirect2
            /*域对象：传递/共享（不同Servlet之间传递/共享数据）
             *  request域：在一次请求内传递/共享数据*/
            //重定向:是两次请求无法用request域传递数据
            //req.setAttribute("user",username);
            //session域，在一次会话内（多次请求）传递/共享数据
            req.getSession().setAttribute("user", username);
            /*重定向时，路径需要加上项目的访问路径/资源虚拟路径
            重定向的URL是给浏览器，让客户端浏览器去访问
            项目的访问路径，目前是/dome，之后可能会修改，这里不能写死
             */
            String contextPath = req.getContextPath();
            resp.sendRedirect(contextPath +"/dome/forwardAndRedirect2");
        } else {
            //若不一致，把错误信息保存在域对象，转发到forwardAndRedirect3
            //转发是一次请求
            req.setAttribute("msg","用户名或密码错误");
            //转发时，不需要加项目访问路径
            //转发的URL是给服务器的
            req.getRequestDispatcher("/forwardAndRedirect3").forward(req,resp);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}
